// pages/order/list.js
const http = require('../../utils/http.js')
const config = require('../../utils/config.js')

Page({
  /**
   * 页面的初始数据
   */
  data: {
    orders: [], // 订单列表
    ordersLoading: true, // 加载状态
    currentStatus: -1, // 当前选中的订单状态 -1:全部 0:待支付 1:待发货 2:待收货 3:已完成 4:已取消 5:退款中 6:已退款
    currentPage: 1, // 当前页码
    pageSize: 10, // 每页数量
    hasMore: true // 是否有更多数据
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    // 如果有传入状态参数，则设置为当前状态
    if (options.status !== undefined) {
      this.setData({
        currentStatus: parseInt(options.status)
      })
    }
    
    this.loadOrders()
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    // 如果是首次进入，则加载数据
    if (this.data.currentPage === 1 && this.data.orders.length === 0) {
      this.loadOrders()
    } else if (this.data.currentPage > 1) {
      // 如果不是首次进入，且有状态选择，则重置并重新加载
      if (this.data.currentStatus !== -1) {
        this.setData({
          currentPage: 1,
          hasMore: true,
          orders: []
        })
        this.loadOrders()
      }
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    this.setData({
      currentPage: 1,
      hasMore: true,
      orders: []
    })
    this.loadOrders().then(() => {
      wx.stopPullDownRefresh()
    })
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    if (this.data.hasMore) {
      this.loadMoreOrders()
    }
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  },

  /**
   * 切换订单状态
   */
  switchStatus: function(e) {
    const status = parseInt(e.currentTarget.dataset.status)
    
    // 如果点击的是当前状态，不做处理
    if (status === this.data.currentStatus) return
    
    // 更新状态并重置数据
    this.setData({
      currentStatus: status,
      currentPage: 1,
      hasMore: true,
      orders: []
    })
    
    // 重新加载订单列表
    this.loadOrders()
  },

  /**
   * 加载订单列表
   */
  loadOrders: function() {
    const that = this
    this.setData({ ordersLoading: true })

    try {
      // 构建请求参数
      const params = {
        url: '/p/faceDesignOrder/page',
        method: 'GET',
        data: {
          page: 1,
          limit: that.data.pageSize
        },
        header: {
          'Content-Type': 'application/json',
          'Authorization': wx.getStorageSync('token')
        },
        callBack: res => {
          console.log('获取订单列表成功:', res)
          if (res && res.records) {
            let orders = res.records
            
            // 如果不是全部状态，则按状态筛选
            if (that.data.currentStatus >= 0) {
              orders = orders.filter(item => item.payStatus === that.data.currentStatus)
            }
            
            // 处理订单数据，添加状态文本
            orders = orders.map(item => {
              return {
                ...item,
                statusText: that.getStatusText(item.payStatus),
                designImage: item.designImage ? config.domain + item.designImage : "/images/icon/preview.svg"
              }
            })
            
            that.setData({
              orders: orders,
              ordersLoading: false,
              hasMore: res.current < res.pages
            })
          } else {
            that.setData({
              orders: [],
              ordersLoading: false,
              hasMore: false
            })
          }
        },
        errCallBack: err => {
          console.error('加载订单列表失败:', err)
          that.setData({
            orders: [],
            ordersLoading: false,
            hasMore: false
          })
          wx.showToast({
            title: '加载订单失败',
            icon: 'none'
          })
        }
      }
      
      // 如果有状态筛选，添加状态参数
      if (that.data.currentStatus >= 0) {
        params.data.status = that.data.currentStatus
      }
      
      http.request(params)
    } catch (error) {
      console.error('加载订单列表异常:', error)
      that.setData({
        orders: [],
        ordersLoading: false,
        hasMore: false
      })
      wx.showToast({
        title: '加载异常，请重试',
        icon: 'none'
      })
    }
    
    // 返回Promise，以便可以在onPullDownRefresh中使用
    return new Promise((resolve) => {
      setTimeout(resolve, 500)
    })
  },

  /**
   * 加载更多订单
   */
  loadMoreOrders: function() {
    const that = this
    if (!this.data.hasMore || this.data.ordersLoading) return

    const nextPage = this.data.currentPage + 1

    try {
      // 构建请求参数
      const params = {
        url: '/p/faceDesignOrder/page',
        method: 'GET',
        data: {
          page: nextPage,
          limit: that.data.pageSize
        },
        header: {
          'Content-Type': 'application/json',
          'Authorization': wx.getStorageSync('token')
        },
        callBack: res => {
          console.log('加载更多订单成功:', res)
          if (res && res.records) {
            let newOrders = res.records
            
            // 如果不是全部状态，则按状态筛选
            if (that.data.currentStatus >= 0) {
              newOrders = newOrders.filter(item => item.payStatus === that.data.currentStatus)
            }
            
            // 处理订单数据，添加状态文本
            newOrders = newOrders.map(item => {
              return {
                ...item,
                statusText: that.getStatusText(item.payStatus),
                designImage: item.designImage ? config.domain + item.designImage : "/images/icon/preview.svg"
              }
            })
            
            that.setData({
              orders: [...that.data.orders, ...newOrders],
              currentPage: nextPage,
              hasMore: res.current < res.pages
            })
          } else {
            that.setData({ hasMore: false })
          }
        },
        errCallBack: err => {
          console.error('加载更多订单失败:', err)
          that.setData({ hasMore: false })
          wx.showToast({
            title: '加载更多失败',
            icon: 'none'
          })
        }
      }
      
      // 如果有状态筛选，添加状态参数
      if (that.data.currentStatus >= 0) {
        params.data.status = that.data.currentStatus
      }
      
      http.request(params)
    } catch (error) {
      console.error('加载更多订单异常:', error)
      that.setData({ hasMore: false })
      wx.showToast({
        title: '加载异常，请重试',
        icon: 'none'
      })
    }
  },

  /**
   * 获取订单状态文本
   */
  getStatusText: function(status) {
    const statusMap = {
      0: '待支付',
      1: '待发货',
      2: '待收货',
      3: '已完成',
      4: '已取消',
      5: '退款中',
      6: '已退款'
    }
    return statusMap[status] || '未知状态'
  },

  /**
   * 查看订单详情
   */
  viewOrderDetail: function(e) {
    console.log(e.currentTarget.dataset)
    const orderId = e.currentTarget.dataset.id
    if (!orderId) {
      wx.showToast({
        title: '订单ID无效',
        icon: 'none'
      })
      return
    }

    wx.navigateTo({
      url: `/pages/order/detail?id=${orderId}`
    })
  },

  /**
   * 支付订单
   */
  payOrder: function(e) {
    console.log(e.currentTarget.dataset);
    
    const orderId = e.currentTarget.dataset.id
    console.log('支付订单ID:', orderId)
    console.log('当前订单数据:', this.data.orders)

    if (!orderId) {
      wx.showToast({
        title: '订单ID无效',
        icon: 'none'
      })
      return
    }

    wx.showLoading({
      mask: true
    });

    // 获取订单号
    const order = this.data.orders.find(item => item.orderId == orderId);
    console.log('找到的订单:', order)
    
    if (!order || !order.orderNumber) {
      wx.hideLoading();
      wx.showToast({
        title: '订单信息无效',
        icon: 'none'
      })
      return
    }

    // 获取最新的微信code
    wx.login({
      success: (res) => {
        if (res.code) {
          // 调用支付接口
          const params = {
            url: "/p/faceDesignOrder/pay",
            method: "POST",
            data: {
              orderNumber: order.orderNumber,
              payType: 1,
              wxCode: res.code
            },
            header: {
              'Content-Type': 'application/x-www-form-urlencoded',
              'Authorization': wx.getStorageSync('token')
            },
            callBack: res => {
              wx.hideLoading();
              console.log('支付调用成功:', res);
              // 调起微信支付
              wx.requestPayment({
                timeStamp: res.data.pay_params.timeStamp,
                nonceStr: res.data.pay_params.nonceStr,
                package: res.data.pay_params.package,
                signType: res.data.pay_params.signType,
                paySign: res.data.pay_params.paySign,
                success: () => {
                  // 支付成功，跳转到支付结果页
                  wx.navigateTo({
                    url: '/pages/pay-result/pay-result?sts=1&orderNumbers=' + order.orderNumber,
                  })
                },
                fail: (err) => {
                  // 支付失败
                  console.error('支付失败:', err);
                  wx.showToast({
                    title: '支付已取消',
                    icon: 'none'
                  });
                }
              });
            },
            errCallBack: err => {
              wx.hideLoading();
              console.error('获取支付参数失败:', err);
              wx.showToast({
                title: '支付失败，请重试',
                icon: 'none'
              });
            }
          };
          
          http.request(params);
        } else {
          wx.hideLoading();
          wx.showToast({
            title: '获取微信code失败',
            icon: 'none'
          });
        }
      },
      fail: (err) => {
        wx.hideLoading();
        console.error('wx.login失败:', err);
        wx.showToast({
          title: '获取微信code失败',
          icon: 'none'
        });
      }
    });
  },

  /**
   * 取消订单
   */
  cancelOrder: function(e) {
    console.log(e.currentTarget.dataset)
    const orderId = e.currentTarget.dataset.id
    if (!orderId) {
      wx.showToast({
        title: '订单ID无效',
        icon: 'none'
      })
      return
    }

    wx.showModal({
      title: '确认取消',
      content: '确定要取消该订单吗？',
      success: (res) => {
        if (res.confirm) {
          // 这里实现取消订单的逻辑
          wx.showToast({
            title: '取消功能开发中',
            icon: 'none'
          })
        }
      }
    })
  },

  /**
   * 确认收货
   */
  confirmReceive: function(e) {
    const orderId = e.currentTarget.dataset.id
    if (!orderId) {
      wx.showToast({
        title: '订单ID无效',
        icon: 'none'
      })
      return
    }

    wx.showModal({
      title: '确认收货',
      content: '确认已收到商品吗？',
      success: (res) => {
        if (res.confirm) {
          // 这里实现确认收货的逻辑
          wx.showToast({
            title: '确认收货功能开发中',
            icon: 'none'
          })
        }
      }
    })
  },

  /**
   * 评价订单
   */
  reviewOrder: function(e) {
    const orderId = e.currentTarget.dataset.id
    if (!orderId) {
      wx.showToast({
        title: '订单ID无效',
        icon: 'none'
      })
      return
    }

    // 这里实现评价订单的逻辑
    wx.showToast({
      title: '评价功能开发中',
      icon: 'none'
    })
  },

  /**
   * 删除订单
   */
  deleteOrder: function(e) {
    const orderId = e.currentTarget.dataset.id
    if (!orderId) {
      wx.showToast({
        title: '订单ID无效',
        icon: 'none'
      })
      return
    }

    wx.showModal({
      title: '确认删除',
      content: '确定要删除该订单吗？删除后不可恢复',
      success: (res) => {
        if (res.confirm) {
          // 这里实现删除订单的逻辑
          wx.showToast({
            title: '删除功能开发中',
            icon: 'none'
          })
        }
      }
    })
  }
})